package com.zp.self.module.level_4_算法练习.数据结构.二叉树;

import java.util.ArrayList;
import java.util.List;

/**
 * @author By ZengPeng
 */
public class 力扣_257_二叉树的所有路径 {
    //测试
    public static void main(String[] args) {
        List<String> strings = new 力扣_257_二叉树的所有路径().binaryTreePaths(TreeNode.initRoot());
        System.out.println(strings);
        System.out.println(new 力扣_257_二叉树的所有路径().binaryTreePaths(new TreeNode(1)));
    }

    /**
     * 题目：给你一个二叉树的根节点 root ，按 任意顺序 ，返回所有从根节点到叶子节点的路径。
     * 叶子节点 是指没有子节点的节点。
     *
     *
     * 分析：
     *      1.递归三部曲 : 单步操作、返回值、终止条件
     *                需要传递当前字符串
     *
     * 边界值注意：
     *      1.
     **/
    public List<String> binaryTreePaths(TreeNode root) {
        return recursive( root.val+"",root);
    }

    public  List<String>  recursive(String proStr,TreeNode root){
        List<String> list = new ArrayList<>();
        if(root.left ==null && root.right==null)
            list.add(proStr);
        if(root.left!=null)
         list.addAll(recursive(proStr+"->"+root.left.val,root.left));
        if(root.right!=null)
            list.addAll(recursive(proStr+"->"+root.right.val,root.right));
        return  list;
    }
}
